<?php

//======================================================================
// 中国姓氏模拟
//======================================================================
Class ChineseName{
  
  private $lastname;      //姓氏
  private $middlename;    //中间名
  private $firstname;     //名
  private $fullname;      //全名
  private $Gender;        //性别
  //========
  //人类性别
  //========
  const MALE = 1;         //男性
  const FEMALE = 0;       //女性
  
  //============
  //中国常用姓氏
  //============
  const FAMILYNAME=<<<EOT
赵 钱 孙 李 周 吴 郑 王
冯 陈 楮 卫 蒋 沈 韩 杨
朱 秦 尤 许 何 吕 施 张
孔 曹 严 华 金 魏 陶 姜
戚 谢 邹 喻 柏 水 窦 章
云 苏 潘 葛 奚 范 彭 郎
鲁 韦 昌 马 苗 凤 花 方
俞 任 袁 柳 酆 鲍 史 唐
费 廉 岑 薛 雷 贺 倪 汤
滕 殷 罗 毕 郝 邬 安 常
乐 于 时 傅 皮 卞 齐 康
伍 余 元 卜 顾 孟 平 黄
和 穆 萧 尹 姚 邵 湛 汪
祁 毛 禹 狄 米 贝 明 臧
计 伏 成 戴 谈 宋 茅 庞
熊 纪 舒 屈 项 祝 董 梁
杜 阮 蓝 闽 席 季 麻 强
贾 路 娄 危 江 童 颜 郭
梅 盛 林 刁 锺 徐 丘 骆
高 夏 蔡 田 樊 胡 凌 霍
虞 万 支 柯 昝 管 卢 莫
经 房 裘 缪 干 解 应 宗
丁 宣 贲 邓 郁 单 杭 洪
包 诸 左 石 崔 吉 钮 龚
程 嵇 邢 滑 裴 陆 荣 翁
荀 羊 於 惠 甄 麹 家 封
芮 羿 储 靳 汲 邴 糜 松
井 段 富 巫 乌 焦 巴 弓
牧 隗 山 谷 车 侯 宓 蓬
全 郗 班 仰 秋 仲 伊 宫
宁 仇 栾 暴 甘 斜 厉 戎
祖 武 符 刘 景 詹 束 龙
叶 幸 司 韶 郜 黎 蓟 薄
印 宿 白 怀 蒲 邰 从 鄂
索 咸 籍 赖 卓 蔺 屠 蒙
池 乔 阴 郁 胥 能 苍 双
闻 莘 党 翟 谭 贡 劳 逄
姬 申 扶 堵 冉 宰 郦 雍
郤 璩 桑 桂 濮 牛 寿 通
边 扈 燕 冀 郏 浦 尚 农
温 别 庄 晏 柴 瞿 阎 充
慕 连 茹 习 宦 艾 鱼 容
向 古 易 慎 戈 廖 庾 终
暨 居 衡 步 都 耿 满 弘
匡 国 文 寇 广 禄 阙 东
欧 殳 沃 利 蔚 越 夔 隆
师 巩 厍 聂 晁 勾 敖 融
冷 訾 辛 阚 那 简 饶 空
曾 毋 沙 乜 养 鞠 须 丰
巢 关 蒯 相 查 后 荆 红
游 竺 权 逑 盖 益 桓 公
万俟 司马 上官 欧阳
夏侯 诸葛 闻人 东方
赫连 皇甫 尉迟 公羊
澹台 公冶 宗政 濮阳
淳于 单于 太叔 申屠
公孙 仲孙 轩辕 令狐
锺离 宇文 长孙 慕容
鲜于 闾丘 司徒 司空
丌官 司寇 仉 督 子车
颛孙 端木 巫马 公西
漆雕 乐正 壤驷 公良
拓拔 夹谷 宰父 谷梁
晋 楚 阎 法 汝 鄢 涂 钦
段干 百里 东郭 南门
呼延 归 海 羊舌 微生
岳 帅 缑 亢 况 後 有 琴
梁丘 左丘 东门 西门
商 牟 佘 佴 伯 赏 南宫
墨 哈 谯 笪 年 爱 阳 佟
EOT;
//==============================
//中国男性-中间名
//==============================
  const MIDDLENAMEFORMALE=<<<EOT
刚 力 钧 劲
峰 浩 然 坚   
仁 义 礼 智 
信 德 诚 伦 
孝 忠 良 勤 
俭 廉 文 章
弘 宏 吉 永
勇 猛 刚 毅
坚 健 豪 雄
英 俊 高 伟 
强 壮 彪 悍
逢 登 开 启           
越 跃 联 战
举 先 博 加 
邦 国 继 祖 
宗 昌 根 柱 
世 伯 仲 叔 
季 昆 力 鸿 
福 禄 寿 禧
财 贵 康 年
安 祥 瑞 嘉 
国 家 佳 迦
EOT;
//============================
//中国男性-末名
//============================
  const FIRSTNAMEFORMALE=<<<EOT
江 山 湖 海
川 屿 陆 峰
舟 船 航 港 
风 雨 雷 霆
石 峰 柱 阁 
邦 国 田 园
南 北 东 西 
春 夏 冬 秋 
华 荣 丰 酆 
福 禄 寿 禧 
财 康 贵 吉
年 安 祥 瑞
仁 义 礼 智
信 德 诚 伦 
忠 孝 勤 俭
文 章 智 治
强 壮 健 力 
宏 大 杰 博
彪 伟 坚 举 
高 刚 力 钧   
浩 明 勇 觉
坚 良 廉 斌 
年 季 甲 子 
封 锋 枫 烽
牛 澜 朗 沨
斌 儒 雅 茂
EOT;
//==============================
//中国女性-中间名
//==============================
  const MIDDLENAMEFORFEMALE=<<<EOT
月 园 冰 景
悦 乐 喜 爱
怜 念 惜 惠
善 明 华 美
丽 圆 婵 芩
EOT;
//==============================
//中国女性-末名
//==============================
  const FIRSTNAMEFORFEMALE=<<<EOT
钗 环 翠 钏 金 玉 珍 瑛 珠 宝 绣 珊 绵 琳 琼 黛 瑶 莹
梅 竹 桂 芝 芹 莲 蓉 薇 花 草 兰 蕙 荃 芷 英 华 芝 菊
婵 娟 姣 好 娉 婷 姿 娥 妙 嫩 彩 艳 秀 美 丽 倩 琴 卿 
清 箐 晴 影 秀 璎
EOT;

 /*
  * 获取随机性别
  */
  protected function getRandomGender(){
     return(mt_rand(0,1));
  }
 /*
  * 读取数组任意元素
  */
  protected function getRandomItem($arr){
    if(is_array($arr)){
      $index = mt_rand(0,count($arr)-1);
      $name = isset($arr[$index])?$arr[$index]:'';
      return($name) ;
    }else{ return ''; }
  }
 /*
  * 读取数组任意元素
  */
  protected function getRandomName($str){
    $nameArr = $this->trimName($str);
    return ($this->getRandomItem($nameArr));
  }
 /*
  * 删除换行回车字符,合并多空格,返回转换数组
  * \n 表示换行且回到下一行的最前端
  * \r 表示换行
  * \t 表示移至下一列
  */
  protected function trimName($str){
      $arr=array("\t","\n","\r");                     //被替换数组
      $res = trim(str_replace($arr, ' ', $str));      //替换字符串
      $res = preg_replace('/\s\s+/', ' ', $str);      //合并空白字符
      return (explode(" ",$res));                     //返回切分数组
  }

 /*
  * 获取随机姓氏
  */
  protected function getFamilyName(){
    return ($this->getRandomName(self::FAMILYNAME));
  }
 /*
  * 获取随机男性中间名
  */
  protected function getMiddleNameForMale(){
    return ($this->getRandomName(self::MIDDLENAMEFORMALE));
  }
 /*
  * 获取随机女性中间名
  */
  protected function getMiddleNameForFemale(){
    return ($this->getRandomName(self::MIDDLENAMEFORFEMALE));
  }
 /*
  * 获取随机男性名
  */
  protected function getFirstNameForMale(){
    return ($this->getRandomName(self::FIRSTNAMEFORMALE));
  }
 /*
  * 获取随机女性名
  */
  protected function getFirstNameForFemale(){
    return ($this->getRandomName(self::FIRSTNAMEFORFEMALE));
  }
 /*
  * 获取男性全名
  */
  public function getFullMaleName(){
     return($this->getFamilyName().$this->getMiddleNameForMale().$this->getFirstNameForMale());
  }
 /*
  * 获取女性全名
  */
  public function getFullFemaleName(){
     return($this->getFamilyName().$this->getMiddleNameForFemale().$this->getFirstNameForFemale());
  }
}
/* 实际用例
  $Name = new ChineseName();
  var_dump($Name->getFullMaleName());
  var_dump($Name->getFullFemaleName());
*/
?>